package str

/*
时间复杂度:O(N) s长度
空间复杂度:O(c) c是小写字母字符集长度

for range字符串时的k是int32类型，'a'也是int32类型，所以可以直接加减
数组或切片索引可以存储任何整型（int/int32/int64）,例如: var a [26]int  a[int64(10)]=0 是可以的
 */
func firstUniqChar(s string) int {
	// 第一次遍历将所有字母存放到hash中
	// 第二次遍历，判断字符是否只出现一次
	var a [26]int
	for _, v := range s {
		a[v-'a']++
	}
	for i, v := range s {
		if a[v-'a'] == 1 {
			return i
		}
	}
	return -1
}